#ifndef LARNUMBER_H
#define LARNUMBER_H

#include <vector>
#include <cstdint>
#include <string>

class LarNumber {
private:
    // 自定义大数类：用vector<uint64_t>分块存储（每块存64位，小端序：低位在前，高位在后）
    std::vector<uint64_t> data;

    void removeLeadingZeros();

    // 阶乘辅助方法
    static LarNumber productRange(int a, int b);
public:
    explicit LarNumber(uint64_t num = 0);
    
    // 算术运算
    LarNumber multiply(const LarNumber& other) const;
    LarNumber& operator*=(const LarNumber& other);

    // 类型转换
    std::string toString() const;

    // 快速幂算法
    static LarNumber bigPowerCPP(const LarNumber& base, int exponent);

    // 阶乘方法
    static LarNumber bigFactorialCPP(int n);
};

#endif // LARNUMBER_H